#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
配置文件 - 系统参数和常量定义
"""

# 图像参数
DEFAULT_WIDTH = 320
DEFAULT_HEIGHT = 240
IMAGE_CHANNELS = 3  # RGB
RGB565_BYTES_PER_PIXEL = 2

# 图像处理参数
IMAGE_ROTATION_ENABLED = True   # 启用图像旋转
IMAGE_ROTATION_DEGREES = 90     # 旋转角度（90度顺时针）
IMAGE_ROTATION_CLOCKWISE = True # 顺时针旋转，False为逆时针

# 串口参数
DEFAULT_PORT = '/dev/ttyUSB0'
DEFAULT_BAUDRATE = 921600
AVAILABLE_BAUDRATES = [115200, 460800, 921600]

# 人脸识别参数
FACE_RECOGNITION_MODEL = "hog"  # 可选: "hog" 或 "cnn"
FACE_RECOGNITION_TOLERANCE = 0.6
FACE_LOCATIONS_MODEL = "hog"

# 显示参数
WINDOW_WIDTH = 1200
WINDOW_HEIGHT = 900

# 智能窗口大小参数
MIN_WINDOW_WIDTH = 480    # 最小窗口宽度
MIN_WINDOW_HEIGHT = 360   # 最小窗口高度
MAX_WINDOW_WIDTH = 1920   # 最大窗口宽度
MAX_WINDOW_HEIGHT = 1080  # 最大窗口高度
WINDOW_SCALE_FACTOR = 2.0 # 窗口相对于图像的缩放因子

FONT_SCALE_LARGE = 1.2
FONT_SCALE_MEDIUM = 1.0
FONT_THICKNESS_THICK = 3
FONT_THICKNESS_NORMAL = 2

# 颜色定义 (BGR格式)
COLOR_RED = (0, 0, 255)
COLOR_GREEN = (0, 255, 0)
COLOR_BLUE = (255, 0, 0)
COLOR_YELLOW = (0, 255, 255)
COLOR_WHITE = (255, 255, 255)

# 报警系统参数
ALARM_INTERVAL = 5.0  # 报警间隔（秒）
ALARM_SIGNAL = "114514\r\n"  # 发送给STM32的报警信号

# Debug模式参数
AUTO_SWITCH_INTERVAL = 3.0  # 自动切换图片间隔（秒）
DEBUG_FRAME_LIMIT = 20  # Debug模式无头运行帧数限制
NORMAL_FRAME_LIMIT = 100  # 正常模式无头运行帧数限制

# 文件夹路径
KNOWN_FACES_DIR = "known_faces"
TEST_IMAGES_DIR = "test"

# 支持的图像格式
SUPPORTED_IMAGE_FORMATS = ('.jpg', '.jpeg', '.png', '.bmp')

# 串口设备模式匹配
SERIAL_PORT_PATTERNS = ['/dev/ttyUSB*', '/dev/ttyACM*', '/dev/ttyS*'] 

# 混合协议优化配置
MIXED_PROTOCOL_CONFIG = {
    'SCAN_TIMEOUT': 3,          # 文本标记扫描超时时间(秒)
    'MAX_TEXT_MARKERS': 100,    # 单次扫描最大文本标记数
    'QUALITY_THRESHOLD': 80.0,  # 图像质量阈值
    'ENDIAN_TEST_ENABLED': True # 启用字节序测试
}

# RGB565字节序配置
RGB565_ENDIAN_CONFIG = {
    'DEFAULT_ENDIAN': 'big',    # 默认使用大端序（STM32格式）
    'AUTO_DETECT': True,        # 自动检测字节序
    'COMPARISON_ENABLED': True  # 启用双窗口对比显示
}

# 图像质量优化参数
QUALITY_OPTIMIZATION = {
    'MIN_DIVERSITY': 150,       # 最小颜色多样性
    'MIN_ENTROPY': 5.0,         # 最小图像熵
    'NOISE_THRESHOLD': 30.0,    # 噪声阈值
    'CONSECUTIVE_LIMIT': 100    # 最大连续重复字节数
} 